威联通arm nas编译内核模块启用zram

前言

上个月给爸妈换了台电视,顺便买了台威联通的ts216。本来觉得arm nas功耗低,不跑啥应用的话,2g的RAM也够用了。没想到威联通的系统特别占用内存,随便开点东西就开始使用swap了,本来CPU就不快,加上IO的延迟,导致系统更慢了。

现在不少安卓手机都使用了zram,zram相当于是在内存里做swap,大概可以让内存拓展50%。所以就尝试把这个应用到nas上看看。

看了一下威联通内核并没有带zram模块,那么就要手动编译了。还好威联通的内核是有开源的。

编译内核模块

  • 下载源码与工具链

威联通的内核开源代码在sourceforge,我下载了GPL_QuTS_Hero-5.0.1-20221111_Kernel.tar.gz。由于是arm的内核所以需要交叉编译,工具链也在sourceforge了。下载Cross Toolchain SDK (arm64).tar.gz即可。

  • 解压与配置

解压内核源码与工具链。config可以从nas上拷一份,zram需要如下配置

1
2
CONFIG_ZRAM=m
CONFIG_ZSMALLOC=m

不知道为啥iSCSI有啥问题可能要改成不编译

makefile修改 cflag_kernel_qnap.mk有一些参数

1
2
CFLAGS_MODULE   = -DTSX16 -DQNAP -DNAS_VIRTUAL -DNAS_VIRTUAL_EX -DQNAP_FNOTIFY -DQNAP_SEARCH_FILENAME_CASE_INSENSITIVE -DQNAP_HAL -DSUPPORT_VAAI -DQNAP_RICHACL -DQNAP_I2C_MV9235 -DSUPPORT_FAST_BLOCK_CLONE -DSUPPORT_LOGICAL_BLOCK_4KB_FROM_NAS_GUI -DSUPPORT_CONCURRENT_TASKS -DSUPPORT_SINGLE_INIT_LOGIN -DVIRTUAL_JBOD -DSUPPORT_VOLUME_BASED -DQTS_HA -DSUPPORT_TP -DNFS_VAAI -DNFS_VAAI_V3 -DNFS_VAAI_SUPPORT_ZFS -DQNAP_SNAPSHOT -DISCSI_MULTI_INIT_ACL -DUSE_BLKDEV_READPAGES -DUSE_BLKDEV_WRITEPAGES -DKSWAPD_FIX -DQNAP_KERNEL_STORAGE_V2
CFLAGS_KERNEL = -DTSX16 -DQNAP -DNAS_VIRTUAL -DNAS_VIRTUAL_EX -DQNAP_FNOTIFY -DQNAP_SEARCH_FILENAME_CASE_INSENSITIVE -DQNAP_HAL -DSUPPORT_VAAI -DQNAP_RICHACL -DQNAP_I2C_MV9235 -DSUPPORT_FAST_BLOCK_CLONE -DSUPPORT_LOGICAL_BLOCK_4KB_FROM_NAS_GUI -DSUPPORT_CONCURRENT_TASKS -DSUPPORT_SINGLE_INIT_LOGIN -DVIRTUAL_JBOD -DSUPPORT_VOLUME_BASED -DQTS_HA -DSUPPORT_TP -DNFS_VAAI -DNFS_VAAI_V3 -DNFS_VAAI_SUPPORT_ZFS -DQNAP_SNAPSHOT -DISCSI_MULTI_INIT_ACL -DUSE_BLKDEV_READPAGES -DUSE_BLKDEV_WRITEPAGES -DKSWAPD_FIX -DQNAP_KERNEL_STORAGE_V2

配置好后即可交叉编译

1
make ARCH=arm64 CROSS_COMIPLE=../../../aarch64-QNAP-linux-gnu/bin/aarch64-QNAP-linux-gnu- -j8 modules V=1

如果没啥问题的话,即可生成zram.ko与zsmalloc.ko

启用内核模块

将编译好的zram.ko与zsmalloc.ko拷贝到nas上。
测试开启

1
2
3
4
5
6
insmod /share/CACHEDEV1_DATA/zram/zsmalloc.ko
insmod /share/CACHEDEV1_DATA/zram/zram.ko
echo 1536M > /sys/block/zram0/disksize
mkswap /dev/zram0
swapoff -a
swapon /dev/zram0 -p 1

查看到下面信息的时候zram就成功开启了

1
2
3
4
5
cat /proc/swaps 

Filename Type Size Used Priority
/dev/zram0 partition 1572860 644608 1

设置自启动

威联通arm的nas需要如下命令挂载/tmp/config,将启动脚本写入autorun.sh,这个也要在网页上配置。

1
mount -t ext2 /dev/mmcblk0p5 /tmp/config

这是我的autorun.sh配置,我把zram的优先级设为最高,还开启了原有的磁盘上的一个swap分区,以防zram也不够用。

1
2
3
4
5
6
7
8
#!/bin/bash
insmod /share/CACHEDEV1_DATA/zram/zsmalloc.ko
insmod /share/CACHEDEV1_DATA/zram/zram.ko
echo 1536M > /sys/block/zram0/disksize
mkswap /dev/zram0
swapoff -a
swapon /dev/zram0 -p 1
swapon /dev/md321 -p -2

写完后需要umount

1
umount /tmp/config

内核模块下载

这个理论上内核是5.10的rk处理器的威联通nas都能用(ts216/ts416)

链接:https://pan.baidu.com/s/1ccDcpfdFd5l787HCI_p5QQ
提取码:zram

作者

ZhongHuihong

发布于

2023-05-31

更新于

2024-04-16

许可协议